/** Context class ------------------------------------------------------**/
/** This classe is the base of an application, it launchs the game and
    ends it, links the moduls and is the owner of the stateManager
**/

#ifndef CONTEXT_CLASS_H_
#define CONTEXT_CLASS_H_

#include <list>
#include <boost/shared_ptr.hpp>
#include <boost/scoped_ptr.hpp>
#include "EventObserver.h"


namespace BPL
{

class StateManager;
class Context
{
public:
    Context();

    virtual ~Context();
    virtual void launch();
    virtual void quit();

    const boost::scoped_ptr<StateManager>& getStateManager();

	const boost::shared_ptr<EventObservable>& getInput() const;

protected:
    bool mpt_run;
	boost::shared_ptr<EventObservable> mpt_input;
    boost::scoped_ptr<StateManager> mpt_stateManager;
};
}

#endif
